package cn.jiyun.springcloud_zuul_demo.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
@Component
public class PreFilter extends ZuulFilter {
    // 确定过滤器执行时期
    // pre：路由之前
    // routing：路由中
    // post：路由之后
    // error：异常
    @Override
    public String filterType() {
        return "pre";
    }

    // 越小越优先
    @Override
    public int filterOrder() {
        return 0;
    }

    // false，不执行run
    // true，执行run
    @Override
    public boolean shouldFilter() {
        return true;
    }

    // 需要执行的具体过滤方法
    @Override
    public Object run() throws ZuulException {
        // 获取请求容器
        RequestContext rc = RequestContext.getCurrentContext();
        // 通过请求容器，获取请求对象
        HttpServletRequest request = rc.getRequest();

        // 获取参数
        String token = request.getParameter("token");
        if(token == null){
            System.out.println("token is null............");
            rc.setSendZuulResponse(false);// 代表请求结束。不在继续向下请求
            rc.setResponseStatusCode(401);// 添加一个响应的状态码
            rc.setResponseBody("请登录后再访问！！！");// 响应内容
            rc.getResponse().setContentType("text/html;charset=utf-8");// 响应类型
        }

        System.out.println("token is null............");
        return null;
    }
}
